﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//void findUniqueNumbers(int arr[], int size) 
//{
//    int xorResult = 0;
//    for (int i = 0; i < size; i++) 
//    {
//        xorResult ^= arr[i];
//    }
//
//    // Find the rightmost set bit in the xorResult
//    int rightmostSetBit = xorResult & -xorResult;
//
//    // Divide the array elements into two groups based on the rightmost set bit
//    int firstUnique = 0;
//    int secondUnique = 0;
//    for (int i = 0; i < size; i++) 
//    {
//        if ((arr[i] & rightmostSetBit) > 0) 
//        {
//            firstUnique ^= arr[i];
//        }
//        else 
//        {
//            secondUnique ^= arr[i];
//        }
//    }
//
//    printf("The two unique numbers are: %d and %d\n", firstUnique, secondUnique);
//}
//
//int main() 
//{
//    int arr[] = { 4, 2, 5, 2, 4, 7, 5, 1 };
//    int size = sizeof(arr) / sizeof(arr[0]);
//    findUniqueNumbers(arr, size);
//    return 0;
//}

//void findTwoNum(int arr[], int n, int* pnum1, int* pnum2)
//{
//	int i;
//	int sum = 0;
//
//	for (i = 0; i < n; i++)
//	{
//		sum ^= arr[i];
//	} //先找到两个数互相异或的结果
//
//	int pos = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (sum & 1 << i)
//		{
//			pos = i;
//			break;
//		}
//	} //再找到有分歧的一位。在这一位上，两个数一定是一个1一个0
//
//	*pnum1 = *pnum2 = 0;
//	for (i = 0; i < n; i++)
//	{
//		if (arr[i] & 1 << pos)//  << 的优先级大于  &
//		{
//			*pnum1 ^= arr[i]; //这一位是1的，放在数1里
//		}
//		else
//		{
//			*pnum2 ^= arr[i]; //这一位是0的，放在数2里
//		}
//	}
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,1,2 };
//	int x = 0;
//	int y = 0;
//	findTwoNum(arr, 6, &x, &y);
//	printf("%d %d", x, y);
//	return 0;
//}

//#define N 4
//
//#define Y(n) ((N+2)*n) /*这种定义在编程规范中是严格禁止的*/
//int main()
//{
//	int z = 2 * (N + Y(5 + 1));
//	printf("%d\n", z);
//	return 0;
//}

//写一个宏，可以将一个整数的二进制位的奇数位和偶数位交换。
//#define SWAP_ODD_EVEN_BITS(x) (((x) & 0xaaaaaaaa) >> 1 | ((x) & 0x55555555) << 1)
//
//int main() {
//    unsigned int x = 11; // 二进制表示为10111
//    printf("Before swap: %u\n", x);
//    x = SWAP_ODD_EVEN_BITS(x);
//    printf("After swap: %u", x);// 0111
//    return 0;
//}

#define offsetof(type, member)